package classes;

import java.util.ArrayList;

import magie.Magie;

import competences.ECompetence;

import data.ECaracteristique;
import data.JetsDeSauvegarde;
import dons.EDons;

public class Pretre extends Classe {

private Magie magie;
	
	public Pretre(int pourcCombattant) {
		super();
		
		magie = new Magie(this.getClass(), pourcCombattant);
		
	}
	
	public Pretre() {
		super();
		
		magie = new Magie(this.getClass(), 50);
		
	}
	
	@Override
	protected void ajoutCaracFavorables() {
		caracFavorable.add(ECaracteristique.SAG);
		caracFavorable.add(ECaracteristique.FOR);
		caracFavorable.add(ECaracteristique.CON);
	}

	@Override
	protected void ajoutCompetencesDeClasse() {
		bonusCompetence = 2;
		competenceDeClasse.add(ECompetence.Artisanat);
		competenceDeClasse.add(ECompetence.Connaissance_des_sorts);
		competenceDeClasse.add(ECompetence.Concentration);
		competenceDeClasse.add(ECompetence.ConnaissanceHistoire);
		competenceDeClasse.add(ECompetence.ConnaissanceMystere);
		competenceDeClasse.add(ECompetence.ConnaissancePlan);
		competenceDeClasse.add(ECompetence.ConnaissanceReligion);	
		competenceDeClasse.add(ECompetence.Diplomatie);
		competenceDeClasse.add(ECompetence.PremierSecours);
		competenceDeClasse.add(ECompetence.Profession);		
	}
	
	private int[] CreateTabSortClasse (){
		int[] nbSort = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
		int i;
		int niveauMax = (this.niveau+1)/2;
		
		if(this.niveau==1){
			nbSort[0]=3;
			nbSort[1]=2;
		}
		else if(this.niveau == 2){
			nbSort[0]=4;
			nbSort[1]=3;
		}
		else if ((this.niveau<=18) && (this.niveau%2==0)){
			for(i=1; i<(niveauMax-2);i++)
				nbSort[i]=5;
			for(i=1; i<(niveauMax-4);i++)
				nbSort[i]=6;
			nbSort[niveauMax-2] = 4;
			nbSort[niveauMax-1] = 4;
			nbSort[niveauMax] = 3;
		}
		else if ((this.niveau<=18) && (this.niveau%2==1)){
			for(i=1; i<(niveauMax-2);i++)
				nbSort[i]=5;
			for(i=1; i<(niveauMax-4);i++)
				nbSort[i]=6;
			nbSort[niveauMax-2] = 4;
			nbSort[niveauMax-1] = 3;
			nbSort[niveauMax] = 2;
		}
		else if(this.niveau==19){
			for(i=0; i<6;i++)
				nbSort[i]=6;
			for(i=6; i<8;i++)
				nbSort[i]=5;
			for(i=8; i<10;i++)
				nbSort[i]=4;
		}
		else if(this.niveau==20){
			for(i=0; i<6;i++)
				nbSort[i]=6;
			for(i=6; i<10;i++)
				nbSort[i]=5;
		}
		
		return nbSort;
	}
	
	public void AdjustSort (int[] carac){
		int[] nbSort = this.CreateTabSortClasse();	
		int[] nbSortActuel = this.magie.getNbSort();
		int i, caracImp = carac[ECaracteristique.SAG.ordinal()];
		
		for(i=0; i<10; i++){
			//limitation du a la valeur de sagesse
			if(i>caracImp-10)
				nbSort[i]=-1;
			//ajout du au modif d'intelligence
			if((((caracImp-10)/2)>=i) && (i!=0) && (nbSort[i]!=-1))
				nbSort[i] ++;
			if(((((caracImp-10)/2)-4)>=i) && (i!=0) && (nbSort[i]!=-1))
				nbSort[i] ++;
			if(((((caracImp-10)/2)-8)>=i) && (i!=0) && (nbSort[i]!=-1))
				nbSort[i] ++;	
			if(((((caracImp-10)/2)-12)>=i) && (i!=0) && (nbSort[i]!=-1))
				nbSort[i] ++;				
			
			if(nbSortActuel[i]<nbSort[i])
				this.magie.AddSort(nbSort[i]-nbSortActuel[i], i);
		}
				
	}
	
	
	@Override
	public void levelUp() {
		super.niveau++;
		
		super.setBBACombattant();
		super.setJdS(JetsDeSauvegarde.Volonte, JetsDeSauvegarde.Vigueur);
	}
	
	@Override
	public String toString() {
		return "Pretre\n" + super.toString() + "\n" + this.magie;
	}

}
